/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package myftp.core.server;

import java.text.DecimalFormat;
import java.util.regex.MatchResult;

/**
 *
 * @author CAVARLE Glenn, LUCAS Stéphane
 *
 * classe d'uniformisation des données serveur de type fichier
 */
public final class ServerFile {

    /**
     * nom du fichier
     * @var name
     */
    private String name;
    /**
     * droit de l'utilisateur sur le fichier
     * @var right
     */
    private String right;
    /**
     * taille du fichier
     * @var size
     */
    private Integer size;
    /**
     * propriétaire du fichier
     * @var owner
     */
    private String owner;
    /**
     * groupe du fichier
     * @var group
     */
    private String group;
    /**
     * chemin du fichier
     * @var path
     */
    private String path;
    /**
     * lien du fichier
     * @var links
     */
    private int links;
    /**
     * Date du fichier
     * @var datetime
     */
    private String datetime;
    /**
     * type du fichier
     * @var type
     */
    private String type;

    public ServerFile() {
    }

    /**
     * Constructeur
     */
    public ServerFile(MatchResult line) {
        /* Analyse de la réponse du serveur */
        this.setType(line.group(1));
        this.setRight(line.group(2));
        this.setLinks(Integer.parseInt(line.group(3)));
        this.setOwner(line.group(4));
        this.setGroup(line.group(5));
        this.setSize(Integer.parseInt(line.group(6)));
        this.setDatetime(line.group(8) + " " + line.group(7) + " " + line.group(9));
        this.setName(line.group(10));
    }

    /**
     * Renvoi la taille du fichier sous forme d'une chaine de caractère
     * (Avec les puissances d'octets (Ko, Mo...))
     */
    public String getSizeString() {
        Double ko, mo, go;
        DecimalFormat df = new DecimalFormat();
        df.setMaximumFractionDigits(2);
        ko = this.size / 1024.0;
        if (ko < 1) {
            return (this.size + " octets");
        }
        mo = ko / 1024;
        if (mo < 1) {
            return (df.format(ko) + " Ko");
        }
        go = mo / 1024;
        if (go < 1) {
            return (df.format(mo) + " Mo");
        }
        return (df.format(go) + " Go");
    }

    /**
     * getter des droits
     * @return right
     */
    public String getRight() {
        return right;
    }

    /**
     * setter des droits
     */
    public void setRight(String right) {
        this.right = right;
    }

    /**
     * getter du groupe
     * @return group
     */
    public String getGroup() {
        return group;
    }

    /**
     * setter du groupe
     */
    public void setGroup(String group) {
        this.group = group;
    }

    /**
     * getter du nom
     * @return name
     */
    public String getName() {
        return name;
    }

    /**
     * setter du nom
     */
    public void setName(String name) {
        this.name = name;
    }

    /**
     * getter du propriétaire
     * @return owner
     */
    public String getOwner() {
        return owner;
    }

    /**
     * setter du propriétaire
     */
    public void setOwner(String owner) {
        this.owner = owner;
    }

    /**
     * getter du chemin
     * @return path
     */
    public String getPath() {
        return path;
    }

    /**
     * setter du chemin
     */
    public void setPath(String path) {
        this.path = path;
    }

    /**
     * getter de la taille
     * @return size
     */
    public Integer getSize() {
        return size;
    }

    /**
     * setter de la taille
     */
    public void setSize(Integer size) {
        this.size = size;
    }

    /**
     * setter des liens
     */
    private void setLinks(int links) {
        this.links = links;
    }

    /**
     * getter des liens
     * @return links
     */
    public int getLinks() {
        return links;
    }

    /**
     * setter de la date
     */
    private void setDatetime(String datetime) {
        this.datetime = datetime;
    }

    /**
     * getter de la date
     * @return datetime
     */
    public String getDatetime() {
        return datetime;
    }

    /**
     * getter du type
     * @return type
     */
    public String getType() {
        return type;
    }

    /**
     * setter du type
     */
    public void setType(String type) {
        this.type = type;
    }

    /**
     * Teste si le fichier est un dossier
     * @return boolean
     */
    public boolean isDir() {
        return this.type.equals("d");
    }

    /**
     * Teste si le fichier est un lien
     * @return boolean
     */
    public boolean isLink() {
        return this.type.equals("l");
    }

    /**
     * Teste si le fichier est un fichier
     * @return boolean
     */
    public boolean isFile() {
        return this.type.equals("-");
    }
}
